package leetcode.editor.cn.dsa11_sort;
// 给定一个非负整数数组 A， A 中一半整数是奇数，一半整数是偶数。
// 对数组进行排序，以便当 A[i] 为奇数时，i 也是奇数；当 A[i] 为偶数时， i 也是偶数。
// 你可以返回任何满足上述条件的数组作为答案。
//
// 示例：
// 输入：[4,2,5,7]
// 输出：[4,5,2,7]
// 解释：[4,7,2,5]，[2,5,4,7]，[2,7,4,5] 也会被接受。
//
// 提示： 
// 2 <= A.length <= 20000
// A.length % 2 == 0 
// 0 <= A[i] <= 1000 
//
// Related Topics 排序 数组 
// 👍 184 👎 0

import java.util.Arrays;

public class SortArrayByParityIi922 {
    public static void main(String[] args) {
        Solution solution = new SortArrayByParityIi922().new Solution();
        int[] arr = {4,2,5,7};
        solution.sortArrayByParityII(arr);
        System.out.println(Arrays.toString(arr));
        int[] arr2 = {1,2,3,4,5,6,7,8};
        solution.sortArrayByParityII(arr2);
        System.out.println(Arrays.toString(arr2));
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[] sortArrayByParityII(int[] A) {
            int prime = 1, even = 0; // 定义奇数指针和偶数指针
            while (prime < A.length && even < A.length) {
                if (A[even] % 2 != 0) { // 非法元素
                    if (A[prime] % 2 == 0) { // 奇数指针元素也非法，则进行交换
                        int temp = A[prime];
                        A[prime] = A[even];
                        A[even] = temp;
                        even += 2;
                    }
                    prime += 2; // 合法元素，指针移动
                } else {
                    even += 2; // 合法元素，指针移动
                }
            }
            return A;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}
